<script>
	//
	//                       _oo0oo_
	//                      o8888888o
	//                      88" . "88
	//                      (| -_- |)
	//                      0\  =  /0
	//                    ___/`---'\___
	//                  .' \\|     |// '.
	//                 / \\|||  :  |||// \
	//               |   | \\\  - /// |   |
	//               | \_|  ''\---/''  |_/ |
	//               \  .-\__  '-'  ___/-. /
	//             ___'. .'  /--.--\  `. .'___
	//          ."" '<  `.___\_<|>_/___.' >' "".
	//         | | :  `- \`.;`\ _ /`;.`/ - ` : | |
	//         \  \ `_.   \_ __\ /__ _/   .-` /  /
	//     =====`-.____`.___ \_____/___.-`___.-'=====
	//                       `=---='
	//
	//
	//     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	//
	//           佛祖保佑       永不报错     永无BUG
	//



	import { mapMutations } from 'vuex'
	import Web3 from "web3"

	import Vue from "vue"
	import { getAddress, connectWallet, signMessage } from "@/common/chainApi.js";

	//获取url地址携带的参数
	function getQueryVariable(variable) {
		var query = window.location.href.split('?')[1];
		console.log(query)
		if (query) {
			var vars = query.split("&");
			for (var i = 0; i < vars.length; i++) {
				var pair = vars[i].split("=");
				if (pair[0] == variable) {
					return pair[1].split("#")[0];
				}
			}
			return (false);
		} else {
			return false
		}
	}


	// #ifdef H5
	import h5PageAnimation from './components/h5-page-animation/';
	// #endif
	export default {
		// #ifdef H5
		mixins: [h5PageAnimation],
		// #endif
		onLaunch: async function() {
			this.checkDevice(); //检查储存手机设备信息
			this.getOption() //获取配置 费率等

			try {
				await connectWallet() //获取当前钱包地址
			} catch (e) {
				//TODO handle the exception
				uni.reLaunch({
					url: "/pages/home/error"
				})
				return false
			}

			if (this.$store.state.token) {
				//如果已登录就获取个人信息
				this.getUserInfo().then(user => {
					console.log("已登录用户", user);
					if (user.address.toUpperCase() != this.defaultAddress.toUpperCase()) {
						//更换了钱包，重新授权
						console.log("更换了钱包，重新授权");
						this.connectWallet();
					} else if (user["uid"] == 0) {
						this.connectWallet();
					}
				}).catch(() => {
					console.log("获取个人信息失败，重新授权");
					//获取个人信息失败，重新授权
					this.connectWallet();
				})
			} else {
				//未登录，重新授权
				console.log("未登录，重新授权");
				this.connectWallet();
			}
		},

		methods: {
			...mapMutations(['setSystemInfo']),
			// 获取配置信息
			getOption() {
				this.api.get("/api/config").then(res => {
					let result = res["data"];
					let data = {
						withdraw_fee: result ? result["withdraw_fee"] : '1', //提现手续费百分比  1%
						tx_desc: result ? result["tx_desc"] : '提现说明', //提现说明
						kefu_url: result ? result["kefu_url"] : '', //客服链接
					};
					const option = data;

					this.$store.commit('setOption', option);
				}).catch(err => {
					console.log("获取失败", err);
					this.apiErr(err)
				})
			},
			checkDevice() {
				uni.getSystemInfo({
					success: (res) => {
						const device = {
							system: res.system, //操作系统版本
							platform: res.platform, //操作系统
							screenHeight: res.screenHeight, //屏幕高度
							screenWidth: res.screenWidth, //屏幕宽度
							windowHeight: res.windowHeight, //屏幕高度
							windowWidth: res.windowWidth, //屏幕宽度
							statusBarHeight: res.statusBarHeight, //状态栏高度
						}
						// #ifdef H5
						// device.statusBarHeight = 20;
						// #endif
						this.setSystemInfo(device); //储存手机信息
					},
				});
			},
			connectWallet() {
				this.$store.commit("loginout") //清除登录信息
				this.checkAccount(); //检查是否存在账号
			},
			//检查是否存在账号
			async checkAccount() {
				const params = {
					address: this.defaultAddress
				}
				const invite_query = getQueryVariable('invite') || ''

				this.api.post("/api/checkAddress", { params: params }).then(res => {

					const status = res["status"] || 0;

					//0账号不存在   1账号存在
					if (status == 0) {
						console.log("该地址没有注册过账号");
						if (invite_query) {
							this.subSignLogin(invite_query) //签名登录
						} else {
							this.bindAddressShow(); // 账号不存在 弹出注册邀请框
						}
					} else {
						console.log("该地址已注册过账号");
						this.subSignLogin(); // 账号存在，直接签名登录
					}

				}).catch(err => {

					console.log("系统错误");
				})
			},
			//弹出注册邀请框
			bindAddressShow() {
				const invite_query = getQueryVariable('invite') || ''
				uni.showModal({
					title: this.i18n_t('绑定邀请人'), //绑定邀请人
					confirmText: this.i18n_t('确认'), //确认
					showCancel: false,
					editable: true,
					placeholderText: this.i18n_t('请输入邀请人地址'), //请输入邀请人地址
					content: invite_query,
					success: (res) => {
						if (res.confirm) {
							if (res.content) {
								this.subSignLogin(res.content) //签名登录
							} else {
								this.bindAddressShow();
							}
						}
					}
				});

			},
			// 签名并登录
			async subSignLogin(invite = null) {
				let sign_text = await signMessage("login");
				const invite_query = getQueryVariable('invite') || ''
				const params = {
					address: this.defaultAddress, //地址
					signature: sign_text, //签名
					parentcode: invite || invite_query,
					message: "login",
				}

				this.loadingShow()
				this.api.post("/api/signLogin", { params: params }).then(res => {
					// 登录成功
					const token = res["token"] || "token--854645a6sd654a6sd6a";
					console.log("登录成功", token);
					uni.showToast({
						title: "登录成功"
					})
					this.$store.commit('login', token)
					uni.$emit("login-success") //全局广播登录成功
					this.getUserInfo()
				}).catch(err => {
					this.showModalView(err.msg)
				}).finally(() => {
					this.loadingHide();
				})
			},
		}
	}

	// #ifdef H5
	var plusReady = function(callback) {
		if (window.plus) {
			callback();
		} else {
			document.addEventListener('plusready', callback);
		}
	};

	plusReady(function() {
		var firstBack = 0;
		var handleBack = function() {
			var currentWebview = plus.webview.currentWebview(); //当前窗口
			console.log('currentWebview', currentWebview);
			var now =
				Date.now ||
				function() {
					return new Date().getTime();
				};
			currentWebview.canBack(function(evt) {
				/**
				 * 有可后退的历史记录，则后退。
				 * 否则，关闭当前窗口。
				 */
				// 有回退的页面
				if (evt.canBack) {
					history.back();
				} else {
					// 没有回退页面
					// firstBack 为0时 第一次返回
					if (!firstBack) {
						// 第一次返回时间
						firstBack = now();
						// 信息提示
						plus.nativeUI.toast('再按一次退出应用');
						setTimeout(function() {
							firstBack = 0;
						}, 2000);
						//第二次点击返回 直接退出应用
					} else if (now() - firstBack < 2000) {
						plus.runtime.quit();
					}
				}
			});
		};
		plus.key.addEventListener('backbutton', handleBack);
	})
	// #endif
</script>

<style lang="scss">
	/* 引入uview1.0 css库 */
	@import "@/uni_modules/uview-ui/index.scss";
	/* 引入公共css */
	@import './static/css/style.css';
	/* 覆盖默认样式 */
	@import './static/css/change-default.css';

	page {
		width: 100%;
		height: 100%;
	}

	$color: #888D9B !global;
</style>